import os
import json
from volcenginesdkarkruntime import Ark
from app.models.client import send_message
from dotenv import load_dotenv  # 导入load_dotenv
import logging

# 从.env文件加载环境变量
load_dotenv()


async def identify_user_emotions(timeSeries_text, client_id):
    api_key = os.getenv("ARK_API_KEY")
    if not api_key:
        raise ValueError("API key not found in environment variables")

    client = Ark(api_key=api_key)
    messages = [
        {
            "role": "system",
            "content": '''
# 角色
你是一个用户情绪判断小助手，你会根据用户的输入判断用户的情绪。只需要识别以下用户情绪：
["curious", "happy", "sad", "shock", "other"]。如果不是在列表里面的情绪就返回"other"

# 响应
请以JSON格式输出

# 示例
输入1：“我今天不开心”
返回：{"emotion": "sad"}

输入2：“今天好开心”
返回：{"emotion": "happy"}

# 任务
根据用户的输入，判断他们的情绪，并以以下格式返回：
{"emotion": "<用户情绪>"}

请务必以JSON格式输出。
                ...
            '''
#             "content": '''
# # 角色设定
# 你是一个情绪分析大师，善于分析语句中包含的情绪，并且用对应的tag关键词进行标注，如下是你的任务
# # 用户输入
# text：{{input_text}}
# # 分析任务
# 从参数中按照顺序提取完整语义的话，整理成
# [{
#     "start_time": "",
#     "end_time": "",
#     "text": "",
#     "emotion_zh": "",
#     "emotion_en": ""
# }]
# 的格式，其中每句话单独提取一次emotion，用于表达上述的信息。

# # 参数信息
# emotion只能包括中文和拼音如下：
# ```
# 开心 kaixin
# 难过 nanguo
# 躺平 tangping
# 震惊 zhenjing
# 在想 zaixiang
# 其它 qita
# ```
# # 示例
# 输入：
# ```
#  [{'confidence': 0, 'text': '你在干嘛呀？你在干嘛呀？有没有想我呀？', 'utterances': [{'definite': True, 'end_time': 4096, 'start_time': 560, 'text': '你在干嘛呀？你在干嘛呀？有没有想我呀？', 'words': [{'blank_duration': 0, 'end_time': 1360, 'start_time': 1200, 'text': '你'}, {'blank_duration': 0, 'end_time': 1520, 'start_time': 1360, 'text': '在'}, {'blank_duration': 0, 'end_time': 1640, 'start_time': 1520, 'text': '干'}, {'blank_duration': 0, 'end_time': 1760, 'start_time': 1640, 'text': '嘛'}, {'blank_duration': 0, 'end_time': 1920, 'start_time': 1760, 'text': '呀'}, {'blank_duration': 0, 'end_time': 2040, 'start_time': 1920, 'text': '你'}, {'blank_duration': 0, 'end_time': 2200, 'start_time': 2040, 'text': '在'}, {'blank_duration': 0, 'end_time': 2360, 'start_time': 2200, 'text': '干'}, {'blank_duration': 0, 'end_time': 2520, 'start_time': 2360, 'text': '嘛'}, {'blank_duration': 0, 'end_time': 2840, 'start_time': 2520, 'text': '呀'}, {'blank_duration': 0, 'end_time': 3080, 'start_time': 2840, 'text': '有'}, {'blank_duration': 0, 'end_time': 3160, 'start_time': 3080, 'text': '没'}, {'blank_duration': 0, 'end_time': 3320, 'start_time': 3160, 'text': '有'}, {'blank_duration': 0, 'end_time': 3480, 'start_time': 3320, 'text': '想'}, {'blank_duration': 0, 'end_time': 3600, 'start_time': 3480, 'text': '我'}, {'blank_duration': 0, 'end_time': 3760, 'start_time': 3600, 'text': '呀'}]}]}], 'sequence': -2}, 'payload_size': 476, 'latency': 0.9313397407531738}}
# ```

# 最终输出的数组如下
# ```json
# [{
#     "start_time": "560",
#     "end_time": "2840",
#     "text": "你在干嘛呀？你在干嘛呀？",
#     "emotion_zh": "好奇",
#     "emotion_en": "haoqi"
# },
# {
#     "start_time": "2840",
#     "end_time": "3760",
#     "text": "有没有想我呀？",
#     "emotion_zh": "在想",
#     "emotion_en": "zaixiang"
# }]
# ```
#             '''
        },
        {
            "role": "user",
            "content": f"用户表现出情绪：{timeSeries_text}"
        }
    ]

    completion = client.chat.completions.create(
        model="ep-20240713163608-vmvkc",
        messages=messages,
    )
    try:
        response_content = completion.choices[0].message.content
    except Exception as e:
        logging.error(e)

    
    logging.info(f"大语言模型返回内容：{response_content}")

    send_emotion = response_content

    # 暂时测试版本
    if (client_id == "iPhone14Pro"):
        logging.info(f"检测到是iPhone14Pro发送过来的情绪，是：{send_emotion}，现在向Android发送表现指令")
        await send_message(client_id="Android", message=send_emotion)
    elif (client_id == "Android"):
        logging.info(f"检测到是Android发送过来的情绪，是：{send_emotion}，现在向iPhone14Pro发送表现指令")
        await send_message(client_id="iPhone14Pro", message=send_emotion)